查看原文
其他

我为什么反对把 Enter 作为发送快捷键

(给程序员零距离加星标,了解项目开发.)

粉丝福利:小编会从今天留言中抽选幸运小伙伴赠送现金红包,感谢大家一直以来的支持!文末见喽!
作者 | dog250
责编 | 欧阳姝黎
出品 | CSDN博客
微信,QQ,飞书,钉钉等常用社交软件电脑版默认会把 Enter 设置为“发送”快捷键,我是很反对的。

上个月有同事在群里问如何获取一个转瞬即逝的进程的全路径,显然查 /proc/$pid/cmdline 的话怕是手速不够快,由于迄至 5.x 版本的 Linux 内核API 已经足够丰富,以至于已经天然支持了获取全路径的 API,即  get_cmdline 。

我快速在我自己的虚拟机里进行尝试:

#!/usr/bin/stap -g
%{#include <linux/skbuff.h>#include <linux/tcp.h>#include <linux/mm.h>#include <net/tcp.h>
int (*ptr)(struct task_struct *task, char *buffer, int buflen);%}
function dump(skk:long)%{ struct sock *sk = (struct sock *)STAP_ARG_skk; struct tcp_sock *tp = tcp_sk(sk); struct inet_sock *inet = inet_sk(sk); struct task_struct *curr = current; char buf[128];
ptr = (void *)0xffffffffb6802d90;
if (ntohs(inet->inet_dport) == 80) { ptr(curr, buf, 128); STAP_PRINTF("%s %s %d\n", curr->comm, buf, curr->pid); }%}
probe kernel.function("tcp_connect"){ dump($sk);}

其中 0xffffffffb6802d90 这个地址是我在 /proc/kallsyms 里查到的。

上面的脚本完美打印出了全路径,我迫不及待得将这个发到群里,希望能够提供帮助。于是我复制粘贴了上面的脚本,一个 Enter 拍下去就发出了,后面我紧接着准备发送一句提示:

0xffffffffb6802d90这个地址你自己从/proc/kallsyms里找,就是get_cmdline的地址。cat /proc/kallsyms |grep get_cmdline 获取。

然而还没等我这句话发出,上面脚本已经被执行,机器已经panic了…这一切都怪 Enter 键。

换句话说,Enter 键作为发送快捷键让人们聊天的内容大部分都不再具有原子性。为了用 Enter 发送消息,有时候发送多段消息又怕不小心敲下 Enter 的时候,你不得不做类似的事情:

请注意,我下面的消息可能会分段发出,只有看到“发完了”的时候,才表示我发完了。。。或者就是如果我还没有发完,我就必须在每条消息后,Enter键拍下前加一句“我还没说完”。。。

而 Enter 键是很容易误碰的。对于程序员而言,除了空格之外的第二吧。

将 Enter 键作为默认的发送快捷键只能让消息发送更快更便捷,却很容易带来误解,有时候你话说一半就不小心发出去了。

这种问题在音视频通信中很常见,比如打电话,句子是一句一句断句的,你总不能每次都加一句我还没说完吧。所以一般重要场合,音频通话是要加锁的,比如一些军事行动,说话必须听到“完毕”才能整体理解,否则就接着听。

最后给一个有用的代码,获取绝对路径最简单的方法:

// curr 就是 current ,也就是一个task_structname = kstrdup_quotable_file(curr->mm->exe_file, GFP_KERNEL);


- END -

1、高手是如何写出让人看不懂的选择器?2、微信新功能:聊天可以加密了?真“悄悄话”3、我写代码的十八般兵器!4、微信提示:这些账户将迁移至 Wechat,开通后清爽无广告!5、嘘!你看到的所有地址都不是真的6、如果你也会手抖输错命令,那就必须给你推荐这个 Fuck 工具7、如何写出干净的 JavaScript 代码
8、火了!Game Boy 模拟器:完美运行超级马里奥、口袋妖怪等游戏!


更多精彩等待你的发现点分享点点赞点在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存